package controller

import (
	"github.com/mojocn/base64Captcha"
	"kong-social-api/commons/base/controller"
	"kong-social-api/modules/common/code/constants"
	"kong-social-api/modules/common/code/model"
)

// 官网：https://github.com/mojocn/base64Captcha
// go get github.com/mojocn/base64Captcha
// Captcha 图形验证码

type CodeController struct {
	controller.BaseController
}

// 验证码的存储器
var store = base64Captcha.DefaultMemStore

// 验证码的类型，默认是数字类型
var driver = base64Captcha.DefaultDriverDigit

// 生成验证码
func (web *CodeController) CreateCode() {
	// 生成验证码的长度
	driver.Length = 6
	// NewCaptcha从驱动程序和存储创建一个captcha实例
	captcha := base64Captcha.NewCaptcha(driver, store)
	// 生成具体的验证码id和code图形地址
	captchaId, base64Img, code, err := captcha.Generate()
	if err != nil {
		web.FailCodeMsg(constants.USER_ERROR_CODE, constants.CODE_CREATE_FAIL)
	}
	// 返回成功的验证码captchaId和base64Img
	web.Ok(model.CodeVo{CaptchaId: captchaId, Base64Img: base64Img, Code: code})
}

// 校验验证码
func (web *CodeController) VerifyCode(id string, code string) bool {
	// 参数1：验证码的key
	// 参数2：验证码明文
	// 参数3：true代表只要验签过参数1的key就立即失效。前端一般要重新生成一个id和验证码
	// true 代表不管成功或者失败，只能校验一次，检验过后就失效
	verify := store.Verify(id, code, true)
	return verify
}
